package libregnummap;
import java.awt.Color;
import java.awt.Font;
import java.awt.Image;
import java.awt.Polygon;

/**
 *
 * @author alvaro
 */
public class Factory {
    
    /**
     * Devuelve una instancia de PrintableObject que sera dibujada como un rectangulo.
     * @param x Posicion X de la figura.
     * @param y Posicion Y de la figura.
     * @param width Ancho de la figura.
     * @param height Alto de la figura.
     * @param c Color de la figura.
     * @param filled Si debe pintarse el relleno o no. True con relleno, False sin relleno.
     * @param alpha Nivel de transparencia. Maximo 1.0, minimo 0.0
     * @param type Parametro para catalogar el objeto.
     * @return Devuelve una instancia de PrintableObject que sera dibujada como un rectangulo.
     */
    public static PrintableObject makeRectangle(int x, int y, int width, int height, Color c, boolean filled, float alpha, String type){
        return new Rectangle(x, y, width, height, c, filled, alpha, type);
    }
    
    /**
     * Devuelve una instancia de PrintableObject que sera dibujada como un ovalo.
     * @param x Posicion de la figura.
     * @param y Posicion Y de la figura.
     * @param width Ancho de la figura.
     * @param height Alto de la figura.
     * @param c Color de la figura.
     * @param filled Si debe pintarse el relleno o no. True con relleno, False sin relleno.
     * @param alpha Nivel de transparencia. Maximo 1.0, minimo 0.0
     * @param type Parametro para catalogar el objeto.
     * @return Devuelve una instancia de PrintableObject que sera dibujada como un ovalo.
     */
    public static PrintableObject makeOval(int x, int y, int width, int height, Color c, boolean filled, float alpha, String type){
        return new Oval(x, y, width, height, c, filled, alpha, type);
    }
    
    /**
     * Devuelve una instancia de PrintableObject que sera dibujada como una linea. La linea ira desde (x0,y0) hasta (x1,y1).
     * @param x0 Posicion x0.
     * @param y0 Posicion y0.
     * @param x1 Posicion x1.
     * @param y1 Posicion y1.
     * @param c Color de la linea.
     * @param stroke Grosor de la linea.
     * @param alpha Nivel de transparencia. Maximo 1.0, minimo 0.0
     * @return Devuelve una instancia de PrintableObject que sera dibujada como una linea.
     */
    public static PrintableObject makeLine(int x0, int y0, int x1, int y1, Color c, float stroke, float alpha, String type){
        return new Line(x0, y0, x1, y1, c, stroke, alpha, type);
    }
    
    /**
     * Devuelve una instancia de PrintableObject que sera dibujada como texto.
     * @param x Posicion X del texto.
     * @param y Poisicion y del texto.
     * @param size Tamanyo del texto.
     * @param c Color del texto.
     * @param alpha Nivel de transparencia. Maximo 1.0, minimo 0.0
     * @param text Texto a mostrar.
     * @param Type Tipo de dato, parametro de control.
     */
    public static PrintableObject makeText(int x, int y, int size, Color c, float alpha, String text, String type){
        return new Text(x, y, size, c, alpha, text, type);
    }
    
    /**
     * Devuelve una instancia de PrintableObject que sera dibujada como texto.
     * @param x Posicion X del texto.
     * @param y Poisicion y del texto.
     * @param font Objeto java.awt.Font que especifica la fuente que deba usar el texto.
     * @param c Color del texto.
     * @param alpha Nivel de transparencia. Maximo 1.0, minimo 0.0
     * @param text Texto a mostrar.
     * @param Type Tipo de dato, parametro de control.
     */
    public static PrintableObject makeText(int x, int y, Font font, Color c, float alpha, String text, String type){
        return new Text(x, y, font, c, alpha, text, type);
    }
    
    /**
     * Devuelve una instancia de PrintableObject que dibujara una figura compleja (java.awt.Polygon), especificada 
     * mediante la coordenadas de sus vertices.
     * @param xcoords Coordenadas X de los vertices.
     * @param ycoords Coordenadas Y de los vertices.
     * @param num Numero de vertices.
     * @param c Color de la figura.
     * @param filled Si la figura debe estar rellena o solo pintar el borde. True rellena, False solo pintar borde.
     * @param alpha Grado de transparencia. Maximo 1.0, minimo 0.0
     * @param type Tipo de dato, parametro de control.
     */
    public static PrintableObject makeAlphaPolygon(int xcoords[], int ycoords[], int num, Color c, boolean filled, float alpha, String type){
        return new AlphaPolygon(xcoords, ycoords, num, c, filled, alpha, type);
    }
    
    /**
     * Devuelve una instancia de PrintableObject que dibujara una figura compleja (java.awt.Polygon), especificada 
     * mediante la coordenadas de sus vertices.
     * @param polygon Objeto de tipo java.awt.Polygon que sera dibujado.
     * @param c Color de la figura.
     * @param filled Si la figura debe estar rellena o solo pintar el borde. True rellena, False solo pintar borde.
     * @param alpha Grado de transparencia. Maximo 1.0, minimo 0.0
     * @param type Tipo de dato, parametro de control.
     */
    public static PrintableObject makeAlphaPolygon(Polygon polygon, Color c, boolean filled, float alpha, String type){
        return new AlphaPolygon(polygon, c, filled, alpha, type);
    }
    
    
    /**
     * Devuelve una instancia de PrintableObject que dibujara la imagen especificada.
     * @param x Posicion X de la imagen.
     * @param y Posicion Y de la imagen.
     * @param img Objecto Image que representa la imagen a dibujar.
     * @param alpha Nivel de transparencia. Maximo 1.0, minimo 0.0
     * @param type Tipo de dato, parametro de control.
     */
    public static PrintableObject makeAlphaImage(int x, int y, Image img, float alpha, String type){
        return new AlphaImage(x, y, img, alpha, type);
    }
    
}
